package ServidorDistribuido;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.util.logging.Level;
import java.util.logging.Logger;

//mchat
public class HiloMulticastEscritura implements Runnable {

    public void run(){
        try {
            System.out.println("HEM: Comenzo el Hilo de escritura Multicast.");
            Servidor.group = InetAddress.getByName("224.2.2.2");
            Servidor.msock = new MulticastSocket(Servidor.MULTICASTSERVERPORT);
            String heartBeat;
            if (!Servidor.group.isMulticastAddress()) {
                System.out.println( "La direccion: " + Servidor.group + " no es una direccion multicast");
                System.exit(0);
            }

            Servidor.msock.setReuseAddress(true);
//                System.out.println("ReuseAddress es: " + Servidor.msock.getReuseAddress());

            Servidor.msock.setLoopbackMode(false);
//                System.out.println("LoopbackMode es: " + Servidor.msock.getLoopbackMode());

            Servidor.msock.setTimeToLive(255);
//                System.out.println("TimeToLive es: " + Servidor.msock.getTimeToLive());

            Servidor.msock.joinGroup(Servidor.group);

            // HiloMulticastLectura manejara la data que llega y la imprimira por STDN output
            HiloMulticastLectura hiloEscuchaMulticast =
                    new HiloMulticastLectura(Servidor.msock, Servidor.group, Servidor.MULTICASTSERVERPORT);
            hiloEscuchaMulticast.start();

            while (Servidor.esCoordinador) {
                heartBeat = Servidor.ipServidorCoord.toString();
                DatagramPacket dp = new DatagramPacket(heartBeat.getBytes(), heartBeat.length(),
                        Servidor.group, Servidor.MULTICASTSERVERPORT);
                Servidor.msock.send(dp);
                Thread.sleep(500);
            }
        } catch (Exception err){
                  System.err.println("\nERROR: No se puede unir al grupo " + err);
                  System.exit(1);
        }finally{
            System.out.println("\nHME: Termino el Hilo Multicast Escritura. ");
        }
    }
}